const APP = getApp()
const WXAPI = require('apifm-wxapi')

// fixed首次打开不显示标题的bug
APP.configLoadOK = () => {
  
}

Page({
  data: {
    userInfo:{}
  },
  onLoad: function (options) {
    getApp().initLanguage(this)
    const userInfo = wx.getStorageSync('userInfo');
    if (userInfo) {
      this.setData({ userInfo });
    } else {
      // 处理未登录情况
      wx.showToast({
        title: '请先登录',
        icon: 'none'
      });
    }
    wx.setNavigationBarTitle({
        title: this.data.$t.cart.title,
    })
  },
  onShow: function () {
    this.shippingCarInfo()
  },
  onPullDownRefresh() {
    this.shippingCarInfo()
    wx.stopPullDownRefresh()
  },
  //获取购物车中菜品信息
  async shippingCarInfo() {
    const that = this; // 保存 this 以便在回调函数中使用
    wx.request({
      url: 'http://127.0.0.1:8888/cartInfo', // 请求接口的 URL
      method: 'GET', // 请求方法,根据接口需求设置
      data:{
        userId: this.data.userInfo.id,
        level: this.data.userInfo.level
      },
      success(res) {
        if (res.statusCode === 200) {
          // 计算 number 和 price
          let totalNumber = 0;
          let totalPrice = 0;
          res.data.data.forEach(item => {
            totalNumber += item.count; // 计算 count 的总和
            totalPrice += item.count * item.price; // 计算 count 与 price 的乘积之和
          });

          // 更新 shippingCarInfo
          that.setData({
            shippingCarInfo: {
              items: res.data.data,
              number: totalNumber,
              price: totalPrice
            },
          });
        } else {
          console.error('接口请求失败', res);
        }
      },
      fail(err) {
        console.error('请求接口失败', err);
        this.setData({
          shippingCarInfo: null,
          showCartPop: false
        })
      }
    });
  },
  //修改购物车数量
  async cartStepChange(e) {
    // 获取菜品数量和索引
    var newCount = e.detail;
    console.log(newCount)
    // var index = e.currentTarget.dataset.idx;
    let goodId = e.currentTarget.dataset.id;
    const userId = this.data.userInfo.id;
    const level = this.data.userInfo.level;

    if (newCount < 1) {
      // 删除商品
      wx.showLoading({
        title: '',
      })
      // const res = await WXAPI.shippingCarInfoRemoveItem(token, item.key)
      wx.request({
        url: `http://127.0.0.1:8888/cartInfo/goods/${userId}/${level}/${goodId}`,
        method: 'DELETE',
        success: (res) => {
          // 隐藏加载中提示
          wx.hideLoading();
          // 更新购物车信息
          this.shippingCarInfo();
          console.log(res.data)
        },
        fail: function(err) {
          console.error('删除失败', err);
          // 在这里处理删除失败的情况，比如显示错误信息
        }
      });
      
    } else {
      // 修改数量
      wx.showLoading({
        title: '',
      })
      // 发送PUT请求到后端接口
      // 假设detailInfo是一个包含要修改的菜品信息以及数量的对象
      const detailInfo = {
        goodsId: goodId, // 菜品ID
        userId: userId, // 用户ID
        level: level, // 用户等级
        count: newCount // 修改后的菜品数量
      };

      wx.request({
        url: 'http://127.0.0.1:8888/cartInfo', // 后端接口URL
        method: 'PUT', // 请求方法为PUT
        data: detailInfo, // 请求的body中包含要修改的菜品信息以及数量
        success: (res) => {
          // 请求成功，根据接口返回的结果更新前端的购物车显示
          console.log('修改购物车中菜品数目成功', res.data);
          // 在这里更新前端的购物车显示，比如重新获取购物车信息并更新页面显示
          wx.hideLoading()
          this.shippingCarInfo()
        },
        fail: (error) => {
          // 请求失败，处理错误情况
          console.error('修改购物车中菜品数目失败', error);
          // 在这里处理请求失败的情况，比如显示错误信息
        }
      });
    }
  },
  async clearCart() {
    wx.showLoading({
      title: '',
    })
    const res = await WXAPI.shippingCarInfoRemoveAll(wx.getStorageSync('token'))
    wx.hideLoading()
    if (res.code != 0) {
      wx.showToast({
        title: res.msg,
        icon: 'none'
      })
      return
    }
    this.shippingCarInfo()
  },
  async goCreateOrder() {
    const goodsJsonStr = []
    this.data.shippingCarInfo.items.forEach(ele => {
      let propertyChildIds = ''
      if (ele.sku) {
        ele.sku.forEach(_sku => {
          propertyChildIds += `,${_sku.optionId}:${_sku.optionValueId}`
        })
      }
      goodsJsonStr.push({
        goodsId: ele.goodsId,
        number: ele.number,
        propertyChildIds,
      })
    })
    wx.showLoading({
      title: '',
    })
    const res = await WXAPI.cyTableAddOrder({
      token: wx.getStorageSync('token'),
      goodsJsonStr: JSON.stringify(goodsJsonStr)
    })
    wx.hideLoading()
    if (res.code != 0) {
      wx.showToast({
        title: res.msg,
        icon: 'none'
      })
      return
    }
    await this.clearCart()
    wx.redirectTo({
      url: '/pages/cart/order',
    })
  },
})